//es2016
// Array.prototype.includes -----------------------------------------
// const arr = ['foo',1,NaN,false]

// console.log(arr.indexOf('foo'))
// console.log(arr.indexOf('bar'))
// console.log(arr.indexOf(NaN))   // 不能用来查找 NaN

// console.log(arr.includes('foo'))
// console.log(arr.includes(NaN))


// 指数运算符 ------------------------

// console.log(Math.pow(2,10))  //2的10次方  ，2是底数，10是指数

// console.log(2 ** 10)  


//----------------------------------------------
//es2017

// const obj = {
//     foo: 'value1',
//     bar: 'value2'
// }
// //object.values ------------
// console.log(Object.values(obj))   // 对象中值组合的数组

// Object.entries --------------------

// console.log(Object.entries(obj))  //数组的形式返回对象中的所有键值队

// for (const [key, value] of Object.entries(obj)){
//     console.log(key, value)
// }

// console.log(new Map(Object.entries(obj)))

//Object.getOwnPropertyDescriptors---------------

// const p1 = {
//     firsytName: 'lei',
//     lastName: 'Wang',
//     get fullName () {
//         return this.firsytName + '' + this.lastName
//     }
// }

// console.log(p1.fullName)

// const p2 = Object.assign({},p1)  // 复制时把firsytName当做普通属性
// p2.firsytName = 'zce'
// console.log(p2.fullName)

// const desciptors = Object.getOwnPropertyDescriptors(p1)
// // console.log(desciptors)
// const p2 = Object.defineProperties({},desciptors)
// p2.firsytName = 'zce'
// console.log(p2.fullName)  //配合  get set使用

//String.prototype.padStart  前 / String.prototype.padEnd  后--------------

// const books = {
//     html: 5,
//     css: 16,
//     javascript: 128
// }
// // for (const [name,count] of Object.entries(books)) {
// //     console.log(name,count)
// // }
// for (const [name,count] of Object.entries(books)) {
//     console.log(`${name.padEnd(16,'-')}|${count.toString().padStart(3,'0')}`)
// }
// //用给定的字符填充在目标字符串的前面和后面 直到达到指定长度


// //在函数参数中添加尾逗号 -----------------
// const arr = [
//     100,
//     200,
//     300,
// ]


// async 、await